{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "<small>\n",
    "Copyright (c) 2017 Andrew Glassner\n",
    "\n",
    "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n",
    "\n",
    "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n",
    "\n",
    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
    "</small>\n",
    "\n",
    "\n",
    "\n",
    "# Deep Learning From Basics to Practice\n",
    "## by Andrew Glassner, https://dlbasics.com, http://glassner.com\n",
    "------\n",
    "## Chapter 15: Scikit-Learn\n",
    "### Notebook 1: Estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import Ridge\n",
    "import seaborn as sns ; sns.set()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "# Make a File_Helper for saving and loading files.\n",
    "\n",
    "save_files = True\n",
    "\n",
    "import os, sys, inspect\n",
    "current_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n",
    "sys.path.insert(0, os.path.dirname(current_dir)) # path to parent dir\n",
    "from DLBasics_Utilities import File_Helper\n",
    "file_helper = File_Helper(save_files)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Make some data in the form of a shallow S\n",
    "np.random.seed(42)\n",
    "num_pts = 100\n",
    "noise_range = 0.2\n",
    "x_vals = []\n",
    "y_vals = []\n",
    "(x_left, x_right) = (-2, 2)\n",
    "for i in range(num_pts):\n",
    "    x = np.random.uniform(x_left, x_right)\n",
    "    y = np.random.uniform(-noise_range, noise_range) + (2*math.sin(x))\n",
    "    x_vals.append(x)\n",
    "    y_vals.append(y)\n",
    "x_column = np.reshape(x_vals, [len(x_vals), 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Make a Ridge estimator\n",
    "ridge_estimator = Ridge()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,\n",
       "   normalize=False, random_state=None, solver='auto', tol=0.001)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Train the estimator on our data\n",
    "ridge_estimator.fit(x_column, y_vals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAF0CAYAAADviZy8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XlclOX+//HXsAmigAou0WLZOQmKYq6VmdJq6a+yMsvc\nlUqN0jSXMjXtHM0tcSeVzF3LOif7HjslreZSyrQoncqlglLREERBtvn9MTJww6CgAwMz7+fj0aMH\n18x9z3UxNO8+c1/3dZksFosFERERERERF+Dh7A6IiIiIiIg4igocERERERFxGSpwRERERETEZajA\nERERERERl6ECR0REREREXIYKHBERERERcRkqcERERERExGWowBEREREREZehAkdERERERFyGChxx\nSc2bN2fhwoWVfkx5REVFMWHChAofdyn9SUhIYNy4cRV+LRERd7FlyxaaN2/OH3/8Ue5jcnJymDFj\nBlu3bq3EntnXr18/+vfvb/v57bffZubMmbafL2U8AAsWLKB58+YO6+eF7Nu3jyeffPKCzxk/fjxR\nUVG2ny81O0UAvJzdAZHKsGnTJho1alTpx1Q38fHxmEwmZ3dDRKTaMplMFf6cTE1N5c0332TGjBmV\n1KuyTZkyxfDz4sWL6dixo+3nSxnP5Rx3KTZv3swvv/xSof4sXrwYf3//yu6auCgVOOKSWrVqVSXH\niIiI67NYLE577WbNmjnttZ2pqq4uiWvSFDWptgoKCli7di09e/akdevWdOvWjTlz5pCTk2N7zoQJ\nExg4cCBTpkyhbdu29OjRg4KCglLTuw4dOsSwYcNo27YtnTt3Zt68eUycOJF+/frZnlP8mD179tC8\neXN27tzJkCFDiIyMpHPnzsyePdsQdGlpaUydOpWoqChatmxJx44dGTlyJCkpKRUa6549e+jTpw+R\nkZF0796dnTt3lnpOSkoKL7zwArfeeistW7bk5ptvZty4caSnpwPWaQxff/01e/bsISwsjK+//hqA\nH3/8kWeeeYabbrqJli1b0qVLF6ZPn274PYqIuCKLxcLixYvp1q0bkZGRjBgxwvaZWdzHH39M3759\nufHGG4mIiKB79+6sXbsWsH723nHHHZhMJsaPH8/tt99uO27z5s089NBDtGnThtatW/PAAw+wbdu2\nMvszcuRI7r//fkNb//79iYiIMHwmT58+ne7duwPGKWpRUVH8+eefvPvuu4SFhRmmpZnNZvr06UOr\nVq3o1q0bK1asKNfv6OOPP+buu++mVatW9O7du1T+pKen8/LLL3PLLbfQqlUrHn300VLP2bFjB48+\n+iht2rShQ4cODB8+nEOHDgHWnH733XdJSUkhLCyM9957r1z9Kj5FLSUlhebNm7Nt2zZiYmK48cYb\n6dixI5MmTSI7O9tw3ObNm+nRowcRERF069aNhQsXkp+fX67XFNehAkeqrUmTJjFjxgzuuusuli5d\nyhNPPMGaNWsYPny44XnffPMNR48eZdGiRTz//PN4eBj/rNPS0ujbty9Hjx5l5syZvPjii3z44Yds\n3br1opfnx44dS7t27Vi2bBk9e/Zk+fLlbN682fZ4dHQ0X331FWPGjCE+Pp5nnnmGnTt3lppScCH7\n9+9nyJAhBAYGEhsbS//+/Rk9erShb9nZ2fTr14/Dhw8zZcoUVq5cyYABA/jggw+YN28eYJ3GEB4e\nTnh4OBs3biQ8PJzU1FSeeOIJsrKymDFjBm+88Qb33Xcfa9asYdWqVeXuo4hITfTaa6+xePFievfu\nzaJFi6hfvz6zZ882POfTTz9l5MiRREREsGTJEhYuXMjVV1/N9OnT+e6772jYsCELFy7EYrEwfPhw\nFi1aBMDatWuZPHkyd911F3FxccyZM4datWoxZswYjh07Zrc/Xbt25eeff+avv/4CrPf2fPvtt+Tl\n5WE2m23P+/LLL+nWrVup4xctWkSDBg3o2rUrGzduJCQkBLAWclOnTqVnz57ExcVx4403MmvWLD77\n7LML/n4sFgsvvfQSAwcOZMGCBdSpU4dhw4axf/9+W//69+9PQkICo0ePZuHChTRu3Jhhw4axe/du\nAH7//XdGjBhBREQEy5Yt49VXX+Xw4cO2e26GDx/ObbfdRkhICBs3buS222676PtWlsmTJ3PllVey\nePFihgwZwttvv82SJUtsjy9btsxWjC1btownnniCN954g8mTJ1/ya0rNpClqUi0dPHiQd955hzFj\nxjB06FAAbrrpJkJCQnjhhRf4/PPP6dKlCwD5+flMnTq1zPtn3nrrLbKysli5cqUtDFq3bs3dd999\n0X48+uijPP300wB07NiRjz76iE8++YTevXtz/Phx/P39mThxIm3atAGgffv2HDlyxFAEXcyyZcsI\nDg5m8eLFeHp6AhAYGMjo0aNtzzly5AhXXHEFM2fOJDQ0FIAOHTpgNpvZs2cPYJ3G4O/vj8lksk23\nM5vNhIWFsWDBAvz8/Gy/xx07drBnzx6GDRtW7n6KiNQkp0+fZvXq1QwZMsT2OX7LLbdw9OhRvvzy\nS9vzDh48SK9evRg/frytLTIyko4dO7J7925atWpFWFgYAFdffbVt6lRycjLDhg0z3Dx/xRVX0KtX\nL/bu3cu9995bqk+33XYbFouFXbt2ce+997J37148PT259tpr2bNnDx06dOD333/nyJEjhhvuC4WF\nheHj40O9evVKTat+/vnn6d27t63///3vf9m1a9cFCwqTycS0adO48847AWs+3H777cTFxTF//nze\ne+89fvrpJzZt2kRERAQAXbp0oV+/fsyePZvNmzfz/fffc+7cOZ588klbxjZu3Jjt27dz9uxZrrrq\nKurXr4+Pj89lTwXv1q0bL7zwAgCdOnVix44dfPLJJ4waNYrMzEyWLl3KY489Zrvyc/PNNxMUFMRL\nL73EoEGD3Ha6nztSgSPV0p49ezCZTNx3332G9vvuu48JEyawZ88eW4ETFBR0wcUBdu/eTZs2bWwf\nvGANocKi5EJat25t+Llx48ZkZWUB0LBhQ958803Aevn8119/5dChQ+zbt69C07/27dtHVFSUrbgB\nuPvuuw0/N2/enDVr1mCxWPj11185cuQIBw8e5NChQxe89H7LLbdwyy23kJeXx8GDB/n111/56aef\n+Ouvv6hXr165+ygiUtOYzWby8/Pp2rWrob179+6GAmfIkCEAnD17lsOHD/Prr7/yww8/AFzws7xw\nxcrTp09z6NAhfv31V3bv3o3JZCrzuJCQEMLCwvjqq6+499572bVrF23btqVJkya2acWff/45gYGB\n3HjjjeUeq8lkom3btraffX19CQ4OJiMj44LHeXl5cccdd9h+9vHxoUuXLnz66acA7Nq1i+DgYMLD\nw21ZY7FY6Nq1K7Nnz+b06dO0bt0aHx8fHnroIe655x66dOlChw4dbAWRI9nL5MJpevv27SM7O5tu\n3boZcrFr165YLBZ27NihAseNqMCRaqlwjnRwcLCh3dPTk3r16hk+tGvXrn3Bc/3111+0aNGiVHtw\ncDAnTpwo8ziTyWS76lG8raCgwPbzv//9b+bNm8fRo0cJDAwkPDy81DEXc+rUqVLFRuE4i4uPj2fZ\nsmWkp6fToEEDWrZsiZ+fH6dPny7z3BaLhTlz5rBu3TqysrJo0qQJERER1KpVy6k3zYqIVLbCHCn5\n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\nrx59+/a1rVAi4gzfffcdp06dMlzyL1xZp0ePHraVcETENSmXRETci0OnqBWuXtG6dWv+9a9/ceTI\nEUaPHk3jxo1LLfcrUlX++OMPRo0axYgRI+jQoQNnz55l48aNZGZm6mZ7ERenXBIRcT8OLXBOnDhB\neHg4kydPpnbt2lx99dXcdNNN7N27V0EiTnPPPfeQnp7OunXrWLFiBT4+PrRu3Zq1a9dy3XXXObt7\nIlKJlEsiIu7H4VPUitu7dy8jRoxg6tSpVbZMoIiISFmUSyIirq/SVlGLiorizz//pGvXrtx1112V\n9TIiIiLlolwSEXEPlbaK2oIFC1i6dClJSUm8+uqrlfUyIiIi5aJcEhFxD5U6RQ3gww8/ZOzYsezb\ntw8vr4tfMLJYLBdd1lBERORSKZdERFybQ6eonTx5ksTERO644w5b2/XXX09ubi6ZmZm2HdgvxGQy\nkZGRRX5+2bsA13Senh4EBPi5/DhBY3VF7jJOcM+xuhrlUvm549+7q4/VXcYJGqurutRscmiBk5yc\nzDPPPMPnn39u26X2+++/p379+uUKkUL5+QXk5bn2GwbuM07QWF2Ru4wT3Gusrka5VHEaq+txl3GC\nxipWDr0HJyIigpYtWzJhwgQOHjzIZ599xuzZs3n66acd+TIiIiLlolwSEXE/Dr2C4+HhweLFi5k2\nbRp9+vTBz8+P/v3788QTTzjyZURERMpFuSQi4n4cvkx0SEgIsbGxjj6tiIjIJVEuiYi4l0pbJlpE\nRERERKSqqcARERERERGXoQJHRERERERchgocERERERFxGSpwRERERETEZajAERERERERl6ECR0RE\nREREXIYKHBERERERcRkqcERERERExGWowBEREREREZehAkdERERERFyGChwREREREXEZKnBERERE\nRMRlqMARERERERGXoQJHRERERERchgocERERERFxGSpwRERERERqAK+vd+P/2CPQrx+m48ec3Z1q\ny8vZHRARERERkQvz/uIzAvv0wpSbC4B/8h+c2vSek3tVPekKjoiIiIhINeb5/XcEDHjcVtwAeBw6\n6MQeVW8qcEREREREqimP334l8LGH8Mg8bWjP6TfAST2q/lTgiIiIiIhUQ6aTJwns0wvPkvfbPPQQ\n2c8975xO1QAqcEREREREqpuzZwl8ojdev/xsaM69+RZYswY8PZ3UsepPBY6IiIiISHWSl0dA9EC8\n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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11df332e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Let's look at the data and the straight-line fit found by Ridge\n",
    "plt.figure(figsize=(10,4))\n",
    "plt.subplot(1,2,1)\n",
    "plt.scatter(x_vals, y_vals, s=20)\n",
    "plt.title('original data')\n",
    "\n",
    "plt.subplot(1,2,2)\n",
    "plt.scatter(x_vals, y_vals, s=20)\n",
    "y_left = ridge_estimator.predict(x_left)\n",
    "y_right = ridge_estimator.predict(x_right)\n",
    "plt.plot([x_left, x_right], [y_left, y_right], color='#ff0000', linewidth=3)\n",
    "plt.title('data with best line')\n",
    "\n",
    "file_helper.save_figure('ridge-demo')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
